home *** CD-ROM | disk | FTP | other *** search
- IFND JST_I_INCLUDED
- JST_I_INCLUDED = 1
-
- include "gp_macros.i"
-
- IFND REDEFINED_REGISTERS
- REDEFINED_REGISTERS = 1
- Ax EQUR A5
- Ay EQUR A6
- ENDC
-
- ; wait for blitter operations to finish
- ; simple but effective
-
- WAIT_BLIT:MACRO
- .wait\@
- BTST #6,dmaconr+$DFF000
- BNE.B .wait\@
- ENDM
-
- ; save local variables
-
- SET_VARZONE:MACRO
- IFNE NARG-2
- FAIL arguments "SET_VARZONE"
- ENDC
- STORE_REGS
- lea \1(pc),A0
- lea \2(pc),A1
- JSRABS SetLocalVarZone
- RESTORE_REGS
- ENDM
-
- ; wait using Vertical beam delay (thanks to Harry for the routine)
-
- BEAM_DELAY:MACRO
- IFNE NARG-1
- FAIL arguments "BEAM_DELAY"
- ENDC
-
- move.w d0,-(a7)
- move.w \1,D0
- beq.b .exit\@ ; don't wait
-
- .loop1\@
- move.w d0,-(a7)
- move.b $dff006,d0 ; VPOS
-
- .loop2\@
- cmp.b $dff006,d0
- beq.s .loop2\@
- move.w (a7)+,d0
- dbf d0,.loop1\@
-
- .exit\@
- move.w (a7)+,d0
- ENDM
-
- ; jump to relocatable JST routine
-
- JSRGEN:MACRO
- IFNE NARG-1
- FAIL arguments "JSRGEN"
- ENDC
-
- PEA .END_JSRGEN\@(PC)
-
- MOVE.L RelTable(PC),-(A7)
- ADD.L #RelOff_\1,(A7)
-
- MOVE.L A0,-(A7)
- MOVE.L 4(A7),A0
- MOVE.L (A0),4(A7)
-
- MOVE.L (A7)+,A0
- RTS
-
- .END_JSRGEN\@
- ENDM
-
- ; jump to relocatable JST routine, with interrupts disabled
-
- JSRGEN_FREEZE:MACRO
- IFNE NARG-1
- FAIL arguments "JSRGEN_FREEZE"
- ENDC
- move.w SR,-(A7)
- move.w #$2700,SR ; freeze, bastard
- JSRGEN \1
- move.w (A7)+,SR
- ENDM
-
- ; jump to absolute JST routines (only when OS is active!!)
-
- JSRABS:MACRO
- IFNE NARG-1
- FAIL arguments "JSRABS"
- ENDC
-
- PEA .END_JSRABS\@(PC)
-
- MOVE.L AbsTable(PC),-(A7)
- ADD.L #AbsOff_\1,(A7)
-
- MOVE.L A0,-(A7)
- MOVE.L 4(A7),A0
- MOVE.L (A0),4(A7)
-
- MOVE.L (A7)+,A0
- RTS
-
- .END_JSRABS\@
- ENDM
-
- JMPABS:MACRO
- IFNE NARG-1
- FAIL arguments "JMPABS"
- ENDC
-
- MOVE.L AbsTable(PC),-(A7)
- ADD.L #AbsOff_\1,(A7)
-
- MOVE.L A0,-(A7)
- MOVE.L 4(A7),A0
- MOVE.L (A0),4(A7)
-
- MOVE.L (A7)+,A0
- RTS
-
- ENDM
-
- GO_SUPERVISOR:MACRO
- JSRABS SupervisorMode
- ENDM
-
- GO_USER:MACRO
- JSRABS UserMode
- ENDM
-
- SAVE_OSDATA:MACRO
- IFLT NARG-1
- FAIL arguments "SAVE_OSDATA"
- ENDC
-
- IFGE NARG-2
- MOVEM.L D0/A0,-(A7)
-
- MOVEQ #0,D0
- MOVE.B \2,D0
-
- IFEQ NARG-3
- LEA \3(PC),A0
- ELSE
- SUB.L A0,A0
- ENDIF
-
- JSRGEN SetQuitKey
-
- MOVEM.L (A7)+,D0/A0
- ENDIF
-
- ;; move.l D0,-(sp)
- move.l #\1,D0
- JSRABS SaveOSData
- ;; move.l (sp)+,D0 ; stack changes anyway!
- ; Registers are zeroed too ;-) [Ralf]
- ENDM
-
- ; obsolete now, but can be useful to load a data register
- ; with a relative address
-
- GETUSRADDR:MACRO
- IFNE NARG-1
- FAIL arguments "PATCHUSRADDR"
- ENDC
- move.l Ax,-(sp)
- lea \1(pc),Ax
- move.l Ax,D0
- move.l (sp)+,Ax
- ENDM
-
- GETGENADDR:MACRO
- IFNE NARG-1
- FAIL arguments "GETGENADDR"
- ENDC
- move.l Ax,-(sp)
- move.l RelTable(pc),Ax
- add.l #RelOff_\1,Ax
- move.l (Ax),D0
- move.l (sp)+,Ax
- ENDM
-
- ; puts a RTS and notifies
-
- PATCH_RTS:MACRO
- IFNE NARG-1
- FAIL arguments "PATCH_RTS"
- ENDC
-
- REGISTER_PATCH \1,#8 ; 6 bytes ahead to allow to find the pattern
- move.w #$4E75,\1
- ENDM
-
- ; puts a RTE and notifies
-
- PATCH_RTE:MACRO
- IFNE NARG-1
- FAIL arguments "PATCH_RTE"
- ENDC
-
- REGISTER_PATCH \1,#8 ; 8 bytes ahead to allow to find the pattern
- move.w #$4E73,\1
- ENDM
-
- ; puts a NOP and notifies
-
- PATCH_NOP:MACRO
- IFNE NARG-1
- FAIL arguments "PATCH_NOP"
- ENDC
-
- REGISTER_PATCH \1,#8 ; 8 bytes ahead to allow to find the pattern
- move.w #$4E71,\1
- ENDM
-
- ; puts 2 NOPs and notifies
-
- PATCH_NOPNOP:MACRO
- IFNE NARG-1
- FAIL arguments "PATCH_NOPNOP"
- ENDC
-
- REGISTER_PATCH \1,#8 ; 8 bytes ahead to allow to find the pattern
- move.l #$4E714E71,\1
- ENDM
-
- ; allows to notify JST about a patch
- ; if PATCH_LOGGED is defined
-
- REGISTER_PATCH:MACRO
- IFNE NARG-2
- FAIL arguments "REGISTER_PATCH"
- ENDC
-
- IFD PATCH_LOGGED
- movem.l D0-A0,-(A7)
- lea \1,A0
- move.l \2,D0
- JSRGEN LogPatch
- movem.l (A7)+,D0-A0
- ENDC
- ENDM
-
- ; obsolete now
-
- PATCHABSJMP:MACRO
- PATCHUSRJMP \1,\2
- ENDM
-
- ; obsolete now
-
- PATCHABSJSR:MACRO
- PATCHUSRJSR \1,\2
- ENDM
-
-
- PATCHUSRJMP:MACRO
- IFNE NARG-2
- FAIL arguments "PATCHUSRJMP"
- ENDC
- PATCHUSRXXX \1,\2,$4EF9
- ENDM
-
- PATCHUSRJSR:MACRO
- IFNE NARG-2
- FAIL arguments "PATCHUSRJSR"
- ENDC
- PATCHUSRXXX \1,\2,$4EB9
- ENDM
-
- PATCHGENJMP:MACRO
- IFNE NARG-2
- FAIL arguments "PATCHGENJMP"
- ENDC
- PATCHGENXXX \1,\2,$4EF9
- ENDM
-
- PATCHGENJSR:MACRO
- IFNE NARG-2
- FAIL arguments "PATCHGENJSR"
- ENDC
- PATCHGENXXX \1,\2,$4EB9
- ENDM
-
- PATCHUSRXXX:MACRO
- REGISTER_PATCH \1,#6
-
- movem.l Ax/Ay,-(sp)
- lea \2(pc),Ax
- lea \1,Ay
- move.w #\3,(Ay)+
- move.l Ax,(Ay)
- movem.l (sp)+,Ax/Ay
- ENDM
-
- PATCHGENXXX:MACRO
- REGISTER_PATCH \1,#6
-
- movem.l Ax/Ay,-(sp)
-
- move.l RelTable(pc),Ax
- add.l #RelOff_\2,Ax
- move.l (Ax),Ax
- lea \1,Ay
- move.w #\3,(Ay)+
- move.l Ax,(Ay)
-
- movem.l (sp)+,Ax/Ay
- ENDM
-
- TESTFILE:MACRO
- IFNE NARG-1
- FAIL arguments "TESTFILE"
- ENDC
- move.l Ax,-(sp)
- lea \1(pc),Ax
- move.l Ax,D0
- JSRABS TestFile
- move.l (sp)+,Ax
- ENDM
-
- HD_PARAMS:MACRO
- IFNE NARG-3
- FAIL arguments "HD_PARAMS"
- ENDC
- HDP_Start:
- dc.l $70004E75 ; 00 if the user tries to start the loader
- dc.b "JOTD" ; 04 magic number
- dc.l 16 ; 09 version (1.3 of JST)
- AbsTable:
- dc.l 0 ; 0C pointer on general absolute table
- RelTable:
- dc.l 0 ; 10 pointer on general relocate table
- dc.l \2 ; 14 diskfile size
- dc.l \3 ; 18 number of disks
- dc.l HDP_End-HDP_Start ; 1C entrypoint offset
- dc.l HDP_FnameStart-HDP_Start ; 20 offset of fname
- _SysBase:
- dc.l 0 ; 24 sysbase
- _DosBase:
- dc.l 0 ; 28 dosbase
-
- HDP_FnameStart:
- IFD MAXON_ASM
- DC.B "\1",0
- ELSE
- dc.b \1,0 ; used for diskfiles
- ENDIF
- cnop 0,4
- HDP_End:
- ; start of the loader
- ; initialize patch zone if PATCH_LOGGED set
-
- IFD PATCH_LOGGED
- JSRABS InitLogPatch
- ENDC
- ENDM
-
- ; if hardware not already defined, do it
-
- IFND dmacon
-
- include "hardware/custom.i"
-
- ENDC
-
- ; copied caches flag from execbase.i to avoid including
- ; system libs only for those ones
-
- IFND CACRF_EnableI
-
- CACRF_EnableI EQU (1<<0) ; Enable instruction cache
- CACRF_FreezeI EQU (1<<1) ; Freeze instruction cache
- CACRF_ClearI EQU (1<<3) ; Clear instruction cache
- CACRF_IBE EQU (1<<4) ; Instruction burst enable
- CACRF_EnableD EQU (1<<8) ; 68030 Enable data cache
- CACRF_FreezeD EQU (1<<9) ; 68030 Freeze data cache
- CACRF_ClearD EQU (1<<11) ; 68030 Clear data cache
- CACRF_DBE EQU (1<<12) ; 68030 Data burst enable
- CACRF_WriteAllocate EQU (1<<13) ; 68030 Write-Allocate mode
- CACRF_EnableE EQU (1<<30) ; Master enable for external caches
- ; External caches should track the
- ; state of the internal caches
- ; such that they do not cache anything
- ; that the internal cache turned off; for.
- CACRF_CopyBack EQU (1<<31) ; Master enable for copyback caches
- ENDC
- ENDC
-